export default {
  namespaced: true, // 命名空间
  // 命名空间
  // taobao.com首页   a  let aaa=1     b let aaa=2
  // let a={aaa:1}    let b={aaa:2}

  state: {
    usera: 'usera的张三'
    //  this.$store.state.模块名.属性名
    //  this.$store.state.user.usera
  },
  mutations: {
    setUsera (state, value) {
      state.usera = value
    }
    // 访问调用:this.$store.commit('user/setUsera',value实参)
  },
  actions: {
    useraActions (ctx, value) {
      console.log(ctx)
      // ctx:{state,commit}
      /*
       state:当前模块的state  state.属性名
       rootState:访问根模块state
                   根模块：rootState.属性名
                   其它模块: rootState.模块名.属性名
       getters:当前模块的getters  getters.方法名
       rootGetters:访问根模块的getters
                   根模块：rootGetters.属性名
                   其它模块: rootGetters['模块名/方法名']
        commit:调用mutations方法
                当前模块： commit('mutations方法名',实参值)
                其它模块:  commit('模块名/mutations方法名',实参值,{root:true})              
        dispatch:调用actions方法
                当前模块： dispatch('actions方法名',实参值)
                其它模块:  dispatch('模块名/actions方法名',实参值,{root:true})   */

      setTimeout(() => {
        ctx.commit('setUsera', value)
      }, 2000)
      // 调用：this.$store.dispatch('user/useraActions',value实参)
    },
    testActions (ctx) {
      // 调用当前模块actions
      ctx.dispatch('test2Actions')
      // 调用其它模块actions
      ctx.dispatch('other/otherActions', null, { root: true })
      //   console.log('testActions')
      // 调用其它模块的mutations
      ctx.commit('other/otherMutations', null, { root: true })
    },
    test2Actions () {
      console.log('test2Actions')
    }
  },
  getters: {
    // state的计算属性
    getUsera (state, getters) {
      return getters.testGetters + state.usera
    },
    testGetters (state, getters, rootState, rootGetters) {
      // state:当前模块的state
      // getters:当前模块的getters
      // rootState:根模块的state
      //      可访问根模块的state    rootState.username
      //      可访问其它模块的state  rootState.模块名.属性名
      // rootGetters:根模块的getters
      //      可访问根模块的state    rootGetters.getters方法名
      //      可访问其它模块的state  rootGetters['模块名/getters方法名']
      return 'user模块下人usera(testGetters):' + rootState.username
    },
    test (state, getters, rootState, rootGetters) {
      return rootState.other.otherInfo + rootGetters['other/otherGetters']
    }
    // 访问：this.$store.getters['user/getUsera']
  }
}
